﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.ComponentModel;
using DTO;
using BUS;

namespace QuanLySach
{
    /// <summary>
    /// Interaction logic for LapPhieuNhapSachUserControl.xaml
    /// </summary>
    public partial class LapPhieuNhapSachUserControl : UserControl
    {
        private Section_DTO Section { get; set; }
        private MainWindow _parent;
        private int _stt;

        private Sach_DTO _sach;

        public LapPhieuNhapSachUserControl(Section_DTO sect, MainWindow par)
        {
            _parent = par;
            this.Section = sect;
            _stt = 0;
            InitializeComponent();
        }


        private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
        {
            // Load các thông tin liên quan trước
            PhatSinhMaPhieuNhap();
            maSach.Focus();
        }

        private void maSach_LostFocus(object sender, RoutedEventArgs e)
        {
            DienThongTinSach();
        }

        private void themSach_Click(object sender, RoutedEventArgs e)
        {
            Them1Sach();
            CapNhatXuatButton();
        }

        private void listSachNhap_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ChiTietPhieuNhap_DTO ctpn = (ChiTietPhieuNhap_DTO)listSachNhap.SelectedItem;
            if (ctpn == null)
                return;
            _sach = Sach_BUS.SACH.LaySach(ctpn.MaSach);
            
            maSach.Text = _sach.MaSach.ToString();
            tenSach.Text = _sach.TenSach;
            tacGia.Text = _sach.TacGia;
            theLoai.Text = _sach.TheLoai;
            soLuongTon.Text = _sach.SoLuongTon.ToString();
            soLuongNhap.Text = ctpn.SoLuongNhap.ToString();
            donGiaNhap.Text = ctpn.DonGiaNhap.ToString();
            _sach = null;

            // Cap nhat Buttoon Xoa
            if (listSachNhap.SelectedIndex == -1)
                XoaSach.IsEnabled = false;
            else
                XoaSach.IsEnabled = true;
        }

        private void XoaSach_Click(object sender, RoutedEventArgs e)
        {
            ChiTietPhieuNhap_DTO ctpn = (ChiTietPhieuNhap_DTO)listSachNhap.SelectedItem;

            if (ctpn == null)
                return;

            listSachNhap.Items.Remove(ctpn);

            ItemCollection list = listSachNhap.Items;
            for (int i = 0; i < list.Count; i++)
            {
                ChiTietPhieuNhap_DTO temp = (ChiTietPhieuNhap_DTO)list[i];
                temp.Stt = i + 1;
            }

            listSachNhap.Items.Refresh();
            // Cap nhat Buttoon Xoa
            if (listSachNhap.SelectedIndex == -1)
                XoaSach.IsEnabled = false;
            else
                XoaSach.IsEnabled = true;

            CapNhatXuatButton();
        }

        private void xuatPhieu_Click(object sender, RoutedEventArgs e)
        {
            // Kiem tra co phu hop
            if (listSachNhap.Items.Count == 0)
            {
                MessageBox.Show("Không thể xuất phiếu vì danh sách Sách rỗng!", "Thông Báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }
            ThemPhieuNhapSach();

            // Thuc hien xuat phieu
            //
        }

        private void capNhat_Click(object sender, RoutedEventArgs e)
        {
            // Kiem tra co phu hop
            if (listSachNhap.Items.Count == 0)
            {
                MessageBox.Show("Không thể xuất phiếu vì danh sách Sách rỗng!", "Thông Báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }
            ThemPhieuNhapSach();
        }

        private void Thoat_Click(object sender, RoutedEventArgs e)
        {
            _parent.ChangeUI(new WelcomeUserControl(Section));
        }

        #region Ham ho tro
        private void PhatSinhMaPhieuNhap()
        {
            int maLonNhat = PhieuNhapSach_BUS.PHIEUNHAPSACH.LayMaPhieuNhapLonNhat();

            if (maLonNhat != -999)
                maPhieuNhap.Text = (maLonNhat + 1).ToString();
            else
                maPhieuNhap.Text = Convert.ToString(1);
        }

        private void DienThongTinSach()
        {
            try
            {
                if (maSach.Text == String.Empty)
                {
                    XoaThongTin();
                    return;
                }
                int ms = Int32.Parse(maSach.Text);
                _sach = Sach_BUS.SACH.LaySach(ms);

                if (_sach == null)
                {
                    MessageBox.Show("Mã Sách không hợp lệ", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                    XoaThongTin();
                    maSach.Focus();
                    maSach.SelectAll();
                    return;
                }

                tenSach.Text = _sach.TenSach;
                theLoai.Text = _sach.TheLoai;
                tacGia.Text = _sach.TacGia;
                soLuongTon.Text = _sach.SoLuongTon.ToString();
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Mã Sách phải là một con số", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                XoaThongTin();
                maSach.Focus();
                maSach.SelectAll();
            }
            finally
            {
                // Cập nhật Button
                CapNhatThemButton();
            }
        }

        private void Them1Sach()
        {
            try
            {
                if (maSach.Text == "")
                {
                    MessageBox.Show("Mã sách không được trống", "Cảnh Báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    maSach.Focus();
                    return;
                }

                
                
                int soluongtontoithieu = ThamSo_BUS.THAMSO.LaySLTonToiThieuTruocKhiNhap();
                int soluongton = Int32.Parse(soLuongTon.Text);

                // Kiem tra
                

                if (soluongton >= soluongtontoithieu)
                {
                    MessageBox.Show("So luong ton toi thieu phai nho hon " + soluongtontoithieu.ToString(), "Cảnh Báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    maSach.Focus();
                    maSach.SelectAll();
                    return;
                }

                // Tang STT
                _stt += 1;

                ChiTietPhieuNhap_DTO ctpn = new ChiTietPhieuNhap_DTO(_stt, Int32.Parse(maPhieuNhap.Text), _sach.MaSach, _sach.TenSach, Int32.Parse(soLuongNhap.Text), float.Parse(donGiaNhap.Text));
                listSachNhap.Items.Add(ctpn);

                maSach.Focus();
                maSach.SelectAll();

                _sach = null;
            }
            catch (FormatException)
            {
                lableKhongHopLe.Visibility = System.Windows.Visibility.Visible;
                return;
            }
        }

        private void XoaThongTin()
        {
            maSach.Text = String.Empty;
            tenSach.Text = String.Empty;
            tacGia.Text = String.Empty;
            theLoai.Text = String.Empty;
            soLuongTon.Text = String.Empty;
            soLuongNhap.Text = String.Empty;
            donGiaNhap.Text = String.Empty;
        }

        private void ThemPhieuNhapSach()
        {
            PhieuNhapSach_BUS.PHIEUNHAPSACH.ThemPhieuNhapSach(new PhieuNhapSach_DTO(ngayNhap.DisplayDate.ToString()));

            int ms = PhieuNhapSach_BUS.PHIEUNHAPSACH.LayMaPhieuNhapLonNhat();

            int c = listSachNhap.Items.Count;

            // Them CTPN vao CSDL
            for (int i = 0; i < c; i++)
            {
                ChiTietPhieuNhap_DTO ctpn = (ChiTietPhieuNhap_DTO)listSachNhap.Items[i];
                ChiTietPhieuNhap_BUS.CHITIETPHIEUNHAP.ThemChiTietPhieuNhap(ctpn);
                Sach_DTO sach = Sach_BUS.SACH.LaySach(ctpn.MaSach);
                sach.SoLuongTon += ctpn.SoLuongNhap;
                Sach_BUS.SACH.SuaSach(sach);
            }

            MessageBox.Show("Lập Phiếu nhập Sách thành công.!", "Thông Báo", MessageBoxButton.OK, MessageBoxImage.Information);

        }
        #endregion

        private void soLuongNhap_LostFocus(object sender, RoutedEventArgs e)
        {
            //5MessageBox.Show("Số lwuojng nhập");
           
            //soLuongNhap.Focus();
            //soLuongNhap.SelectAll();
            //e.Handled = false;
        }

        private void soLuongNhap_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            try
            {
                if (soLuongNhap.Text == String.Empty)
                {
                    return;
                }
                int slnhap = Int32.Parse(soLuongNhap.Text);
                int soluongnhaptoithieu = ThamSo_BUS.THAMSO.LaySLNhapToiThieu();
                if (slnhap < soluongnhaptoithieu)
                {
                    MessageBox.Show("So luong nhap phai lon hon " + soluongnhaptoithieu.ToString(), "Cảnh Báo", MessageBoxButton.OK, MessageBoxImage.Warning);
                    soLuongNhap.Focus();
                    soLuongNhap.SelectAll();
                    return;
                }
            }
            catch (FormatException ex)
            {
                MessageBox.Show("Số lượng nhập phải là một con số");
                soLuongNhap.Focus();
                soLuongNhap.SelectAll();
                return;
            }
            finally
            {
                // Cập nhật lại Button
                CapNhatThemButton();
                if (donGiaNhap.IsFocused)
                    donGiaNhap.SelectAll();
            }
        }

        private void donGiaNhap_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
        {
            try
            {
                if (donGiaNhap.Text == String.Empty)
                    return;
                int dongia = Int32.Parse(donGiaNhap.Text);
            }
            catch (FormatException)
            {
                MessageBox.Show("Đơn giá nhập phải là một con số");
                donGiaNhap.Focus();
                donGiaNhap.SelectAll();
                return;
            }
            finally
            {
                // Cap nhat lai cac Button
                CapNhatThemButton();
                themSach.Focus();
            }
        }

        private void CapNhatThemButton()
        {
            if (maSach.Text == String.Empty || soLuongNhap.Text == String.Empty || donGiaNhap.Text == String.Empty)
                themSach.IsEnabled = false;
            else
            {
                themSach.IsEnabled = true;
            }
        }

        private void CapNhatXuatButton()
        {
            if (listSachNhap.Items.Count != 0)
                xuatPhieu.IsEnabled = true;
            else
                xuatPhieu.IsEnabled = false;
        }

        private void soLuongNhap_GotFocus(object sender, RoutedEventArgs e)
        {
            soLuongNhap.SelectAll();
        }

        private void donGiaNhap_GotFocus(object sender, RoutedEventArgs e)
        {
            donGiaNhap.SelectAll();
        }

        
    }
}
